import { app, BrowserWindow, ipcMain } from 'electron';
import * as path from 'path';
import { exec } from 'child_process';
import * as os from 'os';
import { ElectronChatBridge } from './electron/electron-chat-bridge';

// 全局变量
let mainWindow: BrowserWindow;
let chatBridge: ElectronChatBridge;

// 创建主窗口
function createWindow(): void {
  console.log('开始创建Electron窗口...');
  mainWindow = new BrowserWindow({
    // 自动窗口配置选项 - 可以根据需要调整
    
    // 选项1: 完全自动 - 根据屏幕大小自适应
    width: Math.floor(require('electron').screen.getPrimaryDisplay().workAreaSize.width * 0.8),
    height: Math.floor(require('electron').screen.getPrimaryDisplay().workAreaSize.height * 0.8),
    
    // 选项2: 固定合理尺寸（注释掉上面两行，取消注释下面两行）
    // width: 1200,
    // height: 800,
    
    // 基本窗口设置
    minWidth: 800,
    minHeight: 600,
    show: false, // 延迟显示，避免闪烁
    center: true, // 窗口居中
    resizable: true,
    
    // 可选的自动最大化（取消注释启用）
    // maximized: true,
    
    // macOS 特定设置
    titleBarStyle: process.platform === 'darwin' ? 'hiddenInset' : 'default',
    
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js')
    }
  });

  // 加载HTML文件
  const htmlPath = path.join(__dirname, '..', 'renderer', 'dist', 'index.html');
  console.log('load html:', htmlPath);
  mainWindow.loadFile(htmlPath);

  mainWindow.webContents.openDevTools();

  // 窗口加载完成后的处理
  mainWindow.once('ready-to-show', () => {
    console.log('窗口准备就绪，正在显示...');
    
    // 选项A: 直接显示
    mainWindow.show();
    
    // 选项B: 最大化显示（注释掉上一行，取消注释下一行）
    // mainWindow.maximize();
    
    // 选项C: 全屏显示（注释掉选项A，取消注释下一行）
    // mainWindow.setFullScreen(true);
  });

  // 监听窗口状态变化
  mainWindow.on('maximize', () => {
    console.log('窗口已最大化');
  });
  
  mainWindow.on('unmaximize', () => {
    console.log('窗口已还原');
  });

  // 初始化聊天桥接器
  chatBridge = new ElectronChatBridge(mainWindow);
  console.log('聊天桥接器已初始化');
}

// 设置其他IPC处理器（非AI聊天相关）
function setupIpcHandlers() {
  // Hello World IPC处理器（保留用于测试）
  ipcMain.handle('hello-world', async (event, name?: string) => {
    const greeting = name ? `Hello, ${name}! Welcome to Electron!` : 'Hello, World! This is from Electron main process!';
    console.log('IPC调用: hello-world, 参数:', name);
    return {
      message: greeting,
      timestamp: new Date().toLocaleString('zh-CN'),
      processType: 'main'
    };
  });

  // 执行系统命令
  ipcMain.handle('system-call', async (event, command: string) => {
    return new Promise((resolve) => {
      exec(command, (error, stdout, stderr) => {
        if (error) {
          resolve({ success: false, error: error.message });
          return;
        }
        resolve({ success: true, data: stdout, stderr });
      });
    });
  });

  // 获取系统信息
  ipcMain.handle('get-system-info', async () => {
    return {
      platform: os.platform(),
      arch: os.arch(),
      hostname: os.hostname(),
      cpus: os.cpus().length,
      memory: Math.round(os.totalmem() / 1024 / 1024 / 1024) + ' GB',
      uptime: Math.round(os.uptime() / 3600) + ' hours'
    };
  });

  // 获取当前时间
  ipcMain.handle('get-current-time', async () => {
    return new Date().toLocaleString('zh-CN');
  });
}

// 当Electron完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(() => {
  console.log('Electron prepared ,opening window...');
  setupIpcHandlers();
  createWindow();
  

  app.on('activate', () => {
    // 在macOS上，当点击dock图标并且没有其他窗口打开时，
    // 通常在应用程序中重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});

// 当所有窗口都被关闭时退出应用
app.on('window-all-closed', () => {
  // 在macOS上，应用程序和它们的菜单栏通常保持活动状态，
  // 直到用户使用Cmd + Q明确退出
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

/**
 * Electron模式主入口
 */
async function main() {
  try {
    console.log('启动Electron模式...');
    console.log('Electron应用已启动');
  } catch (error) {
    console.error('Electron启动失败:', error);
    try {
      app.quit();
    } catch {
      process.exit(1);
    }
  }
}

// 自动执行main函数
main().catch(console.error);

export { main as startElectron };